<?php
namespace CHOMP\SGIBundle\Form\Type;

use CHOMP\SGIBundle\Entity\Empresa;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use CHOMP\SGIBundle\Entity\Rol;
use CHOMP\SGIBundle\Services\SessionManager;
use JMS\DiExtraBundle\Annotation as DI;
use Symfony\Component\HttpFoundation\Session\Session;

class IncidenteType extends AbstractType
{
	/**
	 * 
	 * @var SessionManager
	 * @DI\Inject("session.manager")
	 */
	public $sessionSvc;
	
	private $tipo;
	private $id;
	private $idsEmpresas;
	private $usuario;
	private $workflows;
	
	public function __construct($id, $sessionSvc, $tipo, $idWorks){
    	$this->id = $id;
    	$this->tipo = $tipo;
		$this->sessionSvc = $sessionSvc;
		$this->idsEmpresas = 0;
		$this->workflows = $idWorks;
		$this->usuario = $this->sessionSvc->getCurrentUser();
	} 

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

    $builder->add('titulo');
    $builder->add('descripcion', 'textarea', array('label' => 'Descripcion', 'attr' => array('class' => 'textArea')));
	if ($this->tipo == 'CREAR'){
		$this->idsEmpresas = $this->sessionSvc->getEmpresasFor('CREAR_INCIDENTE');
		$usuario = $this->sessionSvc->getCurrentUser();
		$this->idsEmpresas = $this->idsEmpresas.''.$usuario->getEmpresa()->getId();
		$builder->add('empresa', 'entity', array(
					 'class'=>'CHOMPSGIBundle:Empresa',
					 'property'=>'nombre',
					 'attr'=> array('class'=>'incidentes'),
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\EmpresaRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')->where('u.id IN ('.$this->idsEmpresas.') AND u.borrado = 0');
					 }
					));
	}else{
		$this->idsEmpresas = $this->sessionSvc->getEmpresasFor('EDITAR_INCIDENTE');
		$this->sessionSvc->setSession('empresasAfiltrar', $this->idsEmpresas);
		$usuario = $this->sessionSvc->getCurrentUser();
		$this->idsEmpresas = $this->sessionSvc->getSession('idEmpresaIncidente');
		$builder->add('empresa', 'entity', array(
					 'class'=>'CHOMPSGIBundle:Empresa',
					 'property'=>'nombre',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\EmpresaRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')->where('u.id IN ('.$this->idsEmpresas.') AND u.borrado = 0');											 					 }
					));	
	}

	if ($this->sessionSvc->isGranted('EDITAR_INCIDENTE_ALL') && $this->tipo != 'CREAR'){
		$builder->add('estado', 'entity', array(
					 'class'=>'CHOMPSGIBundle:Estado',
					 'property'=>'nombre',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\EstadoRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')
								->where('u.borrado = 0 AND u.id IN ('.$this->workflows.')');
					 }
					));
							
		$builder->add('prioridad', 'entity', array(
					 'class'=>'CHOMPSGIBundle:Prioridad',
					 'property'=>'nombre',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\PrioridadRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')
								->where('u.empresa = ?1 AND u.borrado = 0')
								->setParameter(1, $this->sessionSvc->getSession('idEmpresaIncidente'));
					 }
					));
/*		
		$builder->add('grupoSoporte', 'entity', array(
					 'class'=>'CHOMPSGIBundle:GrupoSoporte',
					 'property'=>'nombre',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\GrupoSoporteRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')
								->where('u.empresa = ?1 AND u.borrado = 0')
								->setParameter(1, $this->sessionSvc->getSession('idEmpresaIncidente'));
					 }
					));
*/
		$builder->add('grupoSoporte', 'entity', array(
					 'class'=>'CHOMPSGIBundle:GrupoSoporte',
					 'property'=>'nombre',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\GrupoSoporteRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')
								->where('u.empresa = ?1 AND u.borrado = 0 AND u.id IN('.$this->sessionSvc->getSession('gSop').')')
								->setParameter(1, $this->sessionSvc->getSession('idEmpresaIncidente'));
					 }
					));		
		$builder->add('responsableSoporte', 'entity', array(
					 'class'=>'CHOMPSGIBundle:Usuario',
					 'property'=>'login',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\UsuarioRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')
								->where('u.empresa = ?1 AND u.borrado = 0')
								->setParameter(1, $this->sessionSvc->getSession('idEmpresaIncidente'));
					 }
					));
		$builder->add('responsableCliente', 'entity', array(
					 'class'=>'CHOMPSGIBundle:Usuario',
					 'property'=>'login',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\UsuarioRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')
								->where('u.empresa = ?1 AND u.borrado = 0 AND u.rol IN ('.$this->sessionSvc->getSession('idsRol').')')
								->setParameter(1, $this->sessionSvc->getSession('idEmpresaIncidente'));
					 }
					));
		$builder->add('cuentaAnalitica', 'entity', array(
                     'class'=>'CHOMPSGIBundle:CuentaAnalitica',
                     'property'=>'nombre',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\CuentaAnaliticaRepository $repository)
                     {
                         return $repository->createQueryBuilder('u')
                                ->where('u.empresa = ?1 AND u.borrado = 0')
                                ->setParameter(1, $this->sessionSvc->getSession('idEmpresaIncidente'));
                     }
                    ));

		$builder->add('fechaCierreAutomatico', 'text');
		
 /*    	$builder->add('comentarios', 'collection', array(
			 'type'         => new ComentarioType($this->id, $this->sessionSvc),
			 'allow_add'    => true,					// Permite referenciar nuevos elementos
			 'by_reference' => false,					// Utiliza el Método addComentario de Incidente
		 ));
*/
		
	}else{
		if ($this->tipo == 'CREAR'){
				$builder->add('estado', 'entity', array(
								 'class'=>'CHOMPSGIBundle:Estado',
								 'property'=>'nombre',
								 'attr'=> array('class'=>'incidentes'),
								 'query_builder' => function (\CHOMP\SGIBundle\Entity\EstadoRepository $repository)
								 {
									 return $repository->createQueryBuilder('u')
											->where('u.nombre = ?1')
											->setParameter(1, 'Abierto');
								 }));		
		}else{
			if ($this->sessionSvc->isGranted('EDITAR_INCIDENTE_ESTADO')){
				if (!$this->sessionSvc->isGranted('EDITAR_INCIDENTE_ESTADONOCERRADO')){
					$builder->add('estado', 'entity', array(
								 'class'=>'CHOMPSGIBundle:Estado',
								 'property'=>'nombre',
								 'query_builder' => function (\CHOMP\SGIBundle\Entity\EstadoRepository $repository)
								 {
									 return $repository->createQueryBuilder('u')
											->where('u.borrado = 0 AND u.id IN ('.$this->workflows.')');
								 }
								));
				}else{
					$builder->add('estado', 'entity', array(
								 'class'=>'CHOMPSGIBundle:Estado',
								 'property'=>'nombre',
								 'query_builder' => function (\CHOMP\SGIBundle\Entity\EstadoRepository $repository)
								 {
									 return $repository->createQueryBuilder('u')
											->where('u.borrado = 0 AND u.id IN ('.$this->workflows.') AND u.nombre != :estado')
											->setParameter(':estado', 'Cerrado/Resuelto');;
								 }
								));

				}
			}
		}

		if ($this->sessionSvc->isGranted('EDITAR_INCIDENTE_PRIORIDAD')){
			$builder->add('prioridad', 'entity', array(
						 'class'=>'CHOMPSGIBundle:Prioridad',
						 'property'=>'nombre',
						 'attr'=> array('class'=>'incidentes'),
						 'query_builder' => function (\CHOMP\SGIBundle\Entity\PrioridadRepository $repository)
						 {
							 return $repository->createQueryBuilder('u')
									->where('u.empresa = ?1 AND u.borrado = 0')
									->setParameter(1, $this->id);
						 }
						));
		}		
		if ($this->sessionSvc->isGranted('EDITAR_INCIDENTE_GRUPOSOPORTE') and $this->tipo == 'CREAR' ){
				$builder->add('grupoSoporte', 'entity', array(
							 'class'=>'CHOMPSGIBundle:GrupoSoporte',
							 'property'=>'nombre',
							 'attr'=> array('class'=>'incidentes'),
							 'query_builder' => function (\CHOMP\SGIBundle\Entity\GrupoSoporteRepository $repository)
							 {
								 return $repository->createQueryBuilder('u')
										->where('u.empresa = ?1 AND u.borrado = 0')
										->setParameter(1, $this->id);
							 }
							));
		}
		if ($this->sessionSvc->isGranted('EDITAR_INCIDENTE_GRUPOSOPORTE') and  $this->tipo != 'CREAR'){
				$builder->add('grupoSoporte', 'entity', array(
					 'class'=>'CHOMPSGIBundle:GrupoSoporte',
					 'property'=>'nombre',
					 'query_builder' => function (\CHOMP\SGIBundle\Entity\GrupoSoporteRepository $repository)
					 {
						 return $repository->createQueryBuilder('u')
								->where('u.empresa = ?1 AND u.borrado = 0 AND u.id IN('.$this->sessionSvc->getSession('gSop').')')
								->setParameter(1, $this->sessionSvc->getSession('idEmpresaIncidente'));
					 }
					));		
		}
		if ($this->sessionSvc->isGranted('EDITAR_INCIDENTE_RESPONSABLESOPORTE')){
				$builder->add('responsableSoporte', 'entity', array(
							 'class'=>'CHOMPSGIBundle:Usuario',
							 'property'=>'login',
							 'attr'=> array('class'=>'incidentes'),
							 'query_builder' => function (\CHOMP\SGIBundle\Entity\UsuarioRepository $repository)
							 {
								 return $repository->createQueryBuilder('u')
										->where('u.empresa = ?1 AND u.borrado = 0')
										->setParameter(1, $this->id);
							 }
							));
		}
		if ($this->sessionSvc->isGranted('EDITAR_INCIDENTE_RESPONSABLECLIENTE')){
				$builder->add('responsableCliente', 'entity', array(
							 'class'=>'CHOMPSGIBundle:Usuario',
							 'property'=>'login',
							 'attr'=> array('class'=>'incidentes'),
							 'query_builder' => function (\CHOMP\SGIBundle\Entity\UsuarioRepository $repository)
							 {
								 return $repository->createQueryBuilder('u')
								->where('u.empresa = ?1 AND u.borrado = 0 AND u.rol IN ('.$this->sessionSvc->getSession('idsRol').')')
								->setParameter(1, $this->id);
							 }
							));
		}
		if ($this->sessionSvc->isGranted('EDITAR_INCIDENTE_CUENTAANALITICA')){
				$builder->add('cuentaAnalitica', 'entity', array(
							 'class'=>'CHOMPSGIBundle:CuentaAnalitica',
							 'property'=>'nombre',
							 'attr'=> array('class'=>'incidentes'),
							 'query_builder' => function (\CHOMP\SGIBundle\Entity\CuentaAnaliticaRepository $repository)
							 {
								 return $repository->createQueryBuilder('u')
										->where('u.empresa = ?1 AND u.borrado = 0')
										->setParameter(1, $this->id);
							 }
							));
		}
		
		$builder->add('fechaCierreAutomatico', 'text');
		$builder->add('update_data', 'submit', array ('label' => 'Guardar', 'attr'=> array('class'=>'btn')));

	
    }
}
		
	public function getName()
    {
        return 'chomp_sgibundle_incidente';
    }
}
?>